home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text;
-
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Rectangle;
- import java.awt.Shape;
- import javax.swing.event.DocumentEvent;
-
- public class WrappedPlainView extends BoxView implements TabExpander {
- FontMetrics metrics;
- Segment lineBuffer;
- boolean widthChanging;
- int tabBase;
- int tabSize;
- boolean wordWrap;
- int sel0;
- int sel1;
- Color unselected;
- Color selected;
-
- public WrappedPlainView(Element var1) {
- this(var1, false);
- }
-
- public WrappedPlainView(Element var1, boolean var2) {
- super(var1, 1);
- this.lineBuffer = new Segment();
- this.wordWrap = var2;
- }
-
- protected int calculateBreakPosition(int var1, int var2) {
- this.loadText(var1, var2);
- int var3;
- if (this.wordWrap) {
- var3 = var1 + Utilities.getBreakLocation(this.lineBuffer, this.metrics, this.tabBase, this.tabBase + ((BoxView)this).getWidth(), this, var1);
- } else {
- var3 = var1 + Utilities.getTabbedTextOffset(this.lineBuffer, this.metrics, this.tabBase, this.tabBase + ((BoxView)this).getWidth(), this, var1);
- }
-
- return var3;
- }
-
- public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- this.updateChildren(var1, var2);
- }
-
- protected void drawLine(int var1, int var2, Graphics var3, int var4, int var5) {
- Element var6 = ((View)this).getElement();
- Element var7 = var6.getElement(var6.getElementIndex(var1));
-
- try {
- if (var7.isLeaf()) {
- this.drawText(var7, var1, var2, var3, var4, var5);
- } else {
- int var9 = var7.getElementIndex(var1);
-
- for(int var10 = var7.getElementIndex(var2); var9 <= var10; ++var9) {
- Element var8 = var7.getElement(var9);
- int var11 = Math.max(var8.getStartOffset(), var1);
- int var12 = Math.min(var8.getEndOffset(), var2);
- var4 = this.drawText(var8, var11, var12, var3, var4, var5);
- }
- }
-
- } catch (BadLocationException var13) {
- throw new StateInvariantError("Can't render: " + var1 + "," + var2);
- }
- }
-
- protected int drawSelectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
- var1.setColor(this.selected);
- Document var6 = ((View)this).getDocument();
- var6.getText(var4, var5 - var4, this.lineBuffer);
- return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
- }
-
- private int drawText(Element var1, int var2, int var3, Graphics var4, int var5, int var6) throws BadLocationException {
- var3 = Math.min(((View)this).getDocument().getLength(), var3);
- AttributeSet var7 = var1.getAttributes();
- if (Utilities.isComposedTextAttributeDefined(var7)) {
- var4.setColor(this.unselected);
- var5 = Utilities.drawComposedText(var7, var4, var5, var6, var2 - var1.getStartOffset(), var3 - var1.getStartOffset());
- } else if (this.sel0 == this.sel1) {
- var5 = this.drawUnselectedText(var4, var5, var6, var2, var3);
- } else if (var2 >= this.sel0 && var2 <= this.sel1 && var3 >= this.sel0 && var3 <= this.sel1) {
- var5 = this.drawSelectedText(var4, var5, var6, var2, var3);
- } else if (this.sel0 >= var2 && this.sel0 <= var3) {
- if (this.sel1 >= var2 && this.sel1 <= var3) {
- var5 = this.drawUnselectedText(var4, var5, var6, var2, this.sel0);
- var5 = this.drawSelectedText(var4, var5, var6, this.sel0, this.sel1);
- var5 = this.drawUnselectedText(var4, var5, var6, this.sel1, var3);
- } else {
- var5 = this.drawUnselectedText(var4, var5, var6, var2, this.sel0);
- var5 = this.drawSelectedText(var4, var5, var6, this.sel0, var3);
- }
- } else if (this.sel1 >= var2 && this.sel1 <= var3) {
- var5 = this.drawSelectedText(var4, var5, var6, var2, this.sel1);
- var5 = this.drawUnselectedText(var4, var5, var6, this.sel1, var3);
- } else {
- var5 = this.drawUnselectedText(var4, var5, var6, var2, var3);
- }
-
- return var5;
- }
-
- protected int drawUnselectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
- var1.setColor(this.unselected);
- Document var6 = ((View)this).getDocument();
- var6.getText(var4, var5 - var4, this.lineBuffer);
- return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
- }
-
- protected final Segment getLineBuffer() {
- return this.lineBuffer;
- }
-
- public float getMaximumSpan(int var1) {
- this.updateMetrics();
- return super.getMaximumSpan(var1);
- }
-
- public float getMinimumSpan(int var1) {
- this.updateMetrics();
- return super.getMinimumSpan(var1);
- }
-
- public float getPreferredSpan(int var1) {
- this.updateMetrics();
- return super.getPreferredSpan(var1);
- }
-
- protected int getTabSize() {
- Integer var1 = (Integer)((View)this).getDocument().getProperty("tabSize");
- int var2 = var1 != null ? var1 : 8;
- return var2;
- }
-
- public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- this.updateChildren(var1, var2);
- Rectangle var4 = var2 != null && ((BoxView)this).isAllocationValid() ? ((CompositeView)this).getInsideAllocation(var2) : null;
- int var5 = var1.getOffset();
- View var6 = ((CompositeView)this).getViewAtPosition(var5, var4);
- if (var6 != null) {
- var6.insertUpdate(var1, var4, var3);
- }
-
- }
-
- protected void loadChildren(ViewFactory var1) {
- Element var2 = ((View)this).getElement();
- int var3 = var2.getElementCount();
- if (var3 > 0) {
- View[] var4 = new View[var3];
-
- for(int var5 = 0; var5 < var3; ++var5) {
- var4[var5] = new WrappedLine(this, var2.getElement(var5));
- }
-
- ((BoxView)this).replace(0, 0, var4);
- }
-
- }
-
- final void loadText(int var1, int var2) {
- try {
- Document var3 = ((View)this).getDocument();
- var3.getText(var1, var2 - var1, this.lineBuffer);
- } catch (BadLocationException var4) {
- throw new StateInvariantError("Can't get line text");
- }
- }
-
- public float nextTabStop(float var1, int var2) {
- int var3 = ((int)var1 - this.tabBase) / this.tabSize;
- return (float)(this.tabBase + (var3 + 1) * this.tabSize);
- }
-
- public void paint(Graphics var1, Shape var2) {
- Rectangle var3 = (Rectangle)var2;
- this.tabBase = var3.x;
- JTextComponent var4 = (JTextComponent)((View)this).getContainer();
- this.sel0 = var4.getSelectionStart();
- this.sel1 = var4.getSelectionEnd();
- this.unselected = ((Component)var4).isEnabled() ? ((Component)var4).getForeground() : var4.getDisabledTextColor();
- Caret var5 = var4.getCaret();
- this.selected = var5.isSelectionVisible() ? var4.getSelectedTextColor() : this.unselected;
- var1.setFont(((Component)var4).getFont());
- super.paint(var1, var2);
- }
-
- public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- this.updateChildren(var1, var2);
- Rectangle var4 = var2 != null && ((BoxView)this).isAllocationValid() ? ((CompositeView)this).getInsideAllocation(var2) : null;
- int var5 = var1.getOffset();
- View var6 = ((CompositeView)this).getViewAtPosition(var5, var4);
- if (var6 != null) {
- var6.removeUpdate(var1, var4, var3);
- }
-
- }
-
- public void setSize(float var1, float var2) {
- this.updateMetrics();
- if ((int)var1 != ((BoxView)this).getWidth()) {
- ((BoxView)this).preferenceChanged((View)null, true, true);
- this.widthChanging = true;
- }
-
- super.setSize(var1, var2);
- this.widthChanging = false;
- }
-
- void updateChildren(DocumentEvent var1, Shape var2) {
- Element var3 = ((View)this).getElement();
- DocumentEvent.ElementChange var4 = var1.getChange(var3);
- if (var4 != null) {
- Element[] var5 = var4.getChildrenRemoved();
- Element[] var6 = var4.getChildrenAdded();
- View[] var7 = new View[var6.length];
-
- for(int var8 = 0; var8 < var6.length; ++var8) {
- var7[var8] = new WrappedLine(this, var6[var8]);
- }
-
- ((BoxView)this).replace(var4.getIndex(), var5.length, var7);
- if (var2 != null) {
- ((BoxView)this).preferenceChanged((View)null, true, true);
- ((View)this).getContainer().repaint();
- }
- }
-
- this.updateMetrics();
- }
-
- final void updateMetrics() {
- Container var1 = ((View)this).getContainer();
- Font var2 = ((Component)var1).getFont();
- this.metrics = ((Component)var1).getFontMetrics(var2);
- this.tabSize = this.getTabSize() * this.metrics.charWidth('m');
- }
- }
-